home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 1996 September & October / Amiga-CD 1996 #9-10.iso / demos / storm-c / stormc / include / dos / dosextens.h < prev    next >
C/C++ Source or Header  |  1994-03-15  |  17KB  |  495 lines

  1. #ifndef DOS_DOSEXTENS_H
  2. #define DOS_DOSEXTENS_H
  3. /*
  4. **    $VER: dosextens.h 36.41 (14.5.92)
  5. **    Includes Release 40.15
  6. **
  7. **    DOS structures not needed for the casual AmigaDOS user
  8. **
  9. **    (C) Copyright 1985-1993 Commodore-Amiga, Inc.
  10. **        All Rights Reserved
  11. */
  12.  
  13. #ifndef EXEC_TASKS_H
  14. #include "exec/tasks.h"
  15. #endif
  16. #ifndef EXEC_PORTS_H
  17. #include "exec/ports.h"
  18. #endif
  19. #ifndef EXEC_LIBRARIES_H
  20. #include "exec/libraries.h"
  21. #endif
  22. #ifndef EXEC_SEMAPHORES_H
  23. #include "exec/semaphores.h"
  24. #endif
  25. #ifndef DEVICES_TIMER_H
  26. #include "devices/timer.h"
  27. #endif
  28.  
  29. #ifndef DOS_DOS_H
  30. #include "dos/dos.h"
  31. #endif
  32.  
  33. /* All DOS processes have this structure */
  34. /* Create and Device Proc returns pointer to the MsgPort in this structure */
  35. /* dev_proc = (struct Process *) (DeviceProc(..) - sizeof(struct Task)); */
  36.  
  37. struct Process {
  38.     struct  Task    pr_Task;
  39.     struct  MsgPort pr_MsgPort; /* This is BPTR address from DOS functions  */
  40.     WORD    pr_Pad;        /* Remaining variables on 4 byte boundaries */
  41.     BPTR    pr_SegList;        /* Array of seg lists used by this process  */
  42.     LONG    pr_StackSize;    /* Size of process stack in bytes        */
  43.     APTR    pr_GlobVec;        /* Global vector for this process (BCPL)    */
  44.     LONG    pr_TaskNum;        /* CLI task number of zero if not a CLI        */
  45.     BPTR    pr_StackBase;    /* Ptr to high memory end of process stack  */
  46.     LONG    pr_Result2;        /* Value of secondary result from last call */
  47.     BPTR    pr_CurrentDir;    /* Lock associated with current directory   */
  48.     BPTR    pr_CIS;        /* Current CLI Input Stream            */
  49.     BPTR    pr_COS;        /* Current CLI Output Stream            */
  50.     APTR    pr_ConsoleTask;    /* Console handler process for current window*/
  51.     APTR    pr_FileSystemTask;    /* File handler process for current drive   */
  52.     BPTR    pr_CLI;        /* pointer to CommandLineInterface        */
  53.     APTR    pr_ReturnAddr;    /* pointer to previous stack frame        */
  54.     APTR    pr_PktWait;        /* Function to be called when awaiting msg  */
  55.     APTR    pr_WindowPtr;    /* Window for error printing            */
  56.  
  57.     /* following definitions are new with 2.0 */
  58.     BPTR    pr_HomeDir;        /* Home directory of executing program        */
  59.     LONG    pr_Flags;        /* flags telling dos about process        */
  60.     void    (*pr_ExitCode)();    /* code to call on exit of program or NULL  */
  61.     LONG    pr_ExitData;    /* Passed as an argument to pr_ExitCode.    */
  62.     UBYTE   *pr_Arguments;    /* Arguments passed to the process at start */
  63.     struct MinList pr_LocalVars; /* Local environment variables            */
  64.     ULONG   pr_ShellPrivate;    /* for the use of the current shell        */
  65.     BPTR    pr_CES;        /* Error stream - if NULL, use pr_COS        */
  66. };  /* Process */
  67.  
  68. /*
  69.  * Flags for pr_Flags
  70.  */
  71. #define    PRB_FREESEGLIST        0
  72. #define    PRF_FREESEGLIST        1
  73. #define    PRB_FREECURRDIR        1
  74. #define    PRF_FREECURRDIR        2
  75. #define    PRB_FREECLI        2
  76. #define    PRF_FREECLI        4
  77. #define    PRB_CLOSEINPUT        3
  78. #define    PRF_CLOSEINPUT        8
  79. #define    PRB_CLOSEOUTPUT        4
  80. #define    PRF_CLOSEOUTPUT        16
  81. #define    PRB_FREEARGS        5
  82. #define    PRF_FREEARGS        32
  83.  
  84. /* The long word address (BPTR) of this structure is returned by
  85.  * Open() and other routines that return a file.  You need only worry
  86.  * about this struct to do async io's via PutMsg() instead of
  87.  * standard file system calls */
  88.  
  89. struct FileHandle {
  90.    struct Message *fh_Link;     /* EXEC message          */
  91.    struct MsgPort *fh_Port;     /* Reply port for the packet */
  92.    struct MsgPort *fh_Type;     /* Port to do PutMsg() to
  93.                   * Address is negative if a plain file */
  94.    LONG fh_Buf;
  95.    LONG fh_Pos;
  96.    LONG fh_End;
  97.    LONG fh_Funcs;
  98. #define fh_Func1 fh_Funcs
  99.    LONG fh_Func2;
  100.    LONG fh_Func3;
  101.    LONG fh_Args;
  102. #define fh_Arg1 fh_Args
  103.    LONG fh_Arg2;
  104. }; /* FileHandle */
  105.  
  106. /* This is the extension to EXEC Messages used by DOS */
  107.  
  108. struct DosPacket {
  109.    struct Message *dp_Link;     /* EXEC message          */
  110.    struct MsgPort *dp_Port;     /* Reply port for the packet */
  111.                  /* Must be filled in each send. */
  112.    LONG dp_Type;         /* See ACTION_... below and
  113.                   * 'R' means Read, 'W' means Write to the
  114.                   * file system */
  115.    LONG dp_Res1;         /* For file system calls this is the result
  116.                   * that would have been returned by the
  117.                   * function, e.g. Write ('W') returns actual
  118.                   * length written */
  119.    LONG dp_Res2;         /* For file system calls this is what would
  120.                   * have been returned by IoErr() */
  121. /*  Device packets common equivalents */
  122. #define dp_Action  dp_Type
  123. #define dp_Status  dp_Res1
  124. #define dp_Status2 dp_Res2
  125. #define dp_BufAddr dp_Arg1
  126.    LONG dp_Arg1;
  127.    LONG dp_Arg2;
  128.    LONG dp_Arg3;
  129.    LONG dp_Arg4;
  130.    LONG dp_Arg5;
  131.    LONG dp_Arg6;
  132.    LONG dp_Arg7;
  133. }; /* DosPacket */
  134.  
  135. /* A Packet does not require the Message to be before it in memory, but
  136.  * for convenience it is useful to associate the two.
  137.  * Also see the function init_std_pkt for initializing this structure */
  138.  
  139. struct StandardPacket {
  140.    struct Message   sp_Msg;
  141.    struct DosPacket sp_Pkt;
  142. }; /* StandardPacket */
  143.  
  144. /* Packet types */
  145. #define ACTION_NIL        0
  146. #define ACTION_STARTUP        0
  147. #define ACTION_GET_BLOCK    2    /* OBSOLETE */
  148. #define ACTION_SET_MAP        4
  149. #define ACTION_DIE        5
  150. #define ACTION_EVENT        6
  151. #define ACTION_CURRENT_VOLUME    7
  152. #define ACTION_LOCATE_OBJECT    8
  153. #define ACTION_RENAME_DISK    9
  154. #define ACTION_WRITE        'W'
  155. #define ACTION_READ        'R'
  156. #define ACTION_FREE_LOCK    15
  157. #define ACTION_DELETE_OBJECT    16
  158. #define ACTION_RENAME_OBJECT    17
  159. #define ACTION_MORE_CACHE    18
  160. #define ACTION_COPY_DIR        19
  161. #define ACTION_WAIT_CHAR    20
  162. #define ACTION_SET_PROTECT    21
  163. #define ACTION_CREATE_DIR    22
  164. #define ACTION_EXAMINE_OBJECT    23
  165. #define ACTION_EXAMINE_NEXT    24
  166. #define ACTION_DISK_INFO    25
  167. #define ACTION_INFO        26
  168. #define ACTION_FLUSH        27
  169. #define ACTION_SET_COMMENT    28
  170. #define ACTION_PARENT        29
  171. #define ACTION_TIMER        30
  172. #define ACTION_INHIBIT        31
  173. #define ACTION_DISK_TYPE    32
  174. #define ACTION_DISK_CHANGE    33
  175. #define ACTION_SET_DATE        34
  176.  
  177. #define ACTION_SCREEN_MODE    994
  178.  
  179. #define ACTION_READ_RETURN    1001
  180. #define ACTION_WRITE_RETURN    1002
  181. #define ACTION_SEEK        1008
  182. #define ACTION_FINDUPDATE    1004
  183. #define ACTION_FINDINPUT    1005
  184. #define ACTION_FINDOUTPUT    1006
  185. #define ACTION_END        1007
  186. #define ACTION_SET_FILE_SIZE    1022    /* fast file system only in 1.3 */
  187. #define ACTION_WRITE_PROTECT    1023    /* fast file system only in 1.3 */
  188.  
  189. /* new 2.0 packets */
  190. #define ACTION_SAME_LOCK    40
  191. #define ACTION_CHANGE_SIGNAL    995
  192. #define ACTION_FORMAT        1020
  193. #define ACTION_MAKE_LINK    1021
  194. /**/
  195. /**/
  196. #define ACTION_READ_LINK    1024
  197. #define ACTION_FH_FROM_LOCK    1026
  198. #define ACTION_IS_FILESYSTEM    1027
  199. #define ACTION_CHANGE_MODE    1028
  200. /**/
  201. #define ACTION_COPY_DIR_FH    1030
  202. #define ACTION_PARENT_FH    1031
  203. #define ACTION_EXAMINE_ALL    1033
  204. #define ACTION_EXAMINE_FH    1034
  205.  
  206. #define ACTION_LOCK_RECORD    2008
  207. #define ACTION_FREE_RECORD    2009
  208.  
  209. #define ACTION_ADD_NOTIFY    4097
  210. #define ACTION_REMOVE_NOTIFY    4098
  211.  
  212. /* Added in V39: */
  213. #define ACTION_EXAMINE_ALL_END    1035
  214. #define ACTION_SET_OWNER    1036
  215.  
  216. /* Tell a file system to serialize the current volume. This is typically
  217.  * done by changing the creation date of the disk. This packet does not take
  218.  * any arguments.  NOTE: be prepared to handle failure of this packet for
  219.  * V37 ROM filesystems.
  220.  */
  221. #define    ACTION_SERIALIZE_DISK    4200
  222.  
  223. /*
  224.  * A structure for holding error messages - stored as array with error == 0
  225.  * for the last entry.
  226.  */
  227. struct ErrorString {
  228.     LONG  *estr_Nums;
  229.     UBYTE *estr_Strings;
  230. };
  231.  
  232. /* DOS library node structure.
  233.  * This is the data at positive offsets from the library node.
  234.  * Negative offsets from the node is the jump table to DOS functions
  235.  * node = (struct DosLibrary *) OpenLibrary( "dos.library" .. )         */
  236.  
  237. struct DosLibrary {
  238.     struct Library dl_lib;
  239.     struct RootNode *dl_Root; /* Pointer to RootNode, described below */
  240.     APTR    dl_GV;          /* Pointer to BCPL global vector          */
  241.     LONG    dl_A2;          /* BCPL standard register values          */
  242.     LONG    dl_A5;
  243.     LONG    dl_A6;
  244.     struct ErrorString *dl_Errors;      /* PRIVATE pointer to array of error msgs */
  245.     struct timerequest *dl_TimeReq;      /* PRIVATE pointer to timer request */
  246.     struct Library     *dl_UtilityBase;   /* PRIVATE ptr to utility library */
  247.     struct Library     *dl_IntuitionBase; /* PRIVATE ptr to intuition library */
  248. };  /*    DosLibrary */
  249.  
  250. /*                   */
  251.  
  252. struct RootNode {
  253.     BPTR    rn_TaskArray;         /* [0] is max number of CLI's
  254.                       * [1] is APTR to process id of CLI 1
  255.                       * [n] is APTR to process id of CLI n */
  256.     BPTR    rn_ConsoleSegment; /* SegList for the CLI               */
  257.     struct  DateStamp rn_Time; /* Current time                   */
  258.     LONG    rn_RestartSeg;     /* SegList for the disk validator process   */
  259.     BPTR    rn_Info;           /* Pointer to the Info structure           */
  260.     BPTR    rn_FileHandlerSegment; /* segment for a file handler       */
  261.     struct MinList rn_CliList; /* new list of all CLI processes */
  262.                    /* the first cpl_Array is also rn_TaskArray */
  263.     struct MsgPort *rn_BootProc; /* private ptr to msgport of boot fs       */
  264.     BPTR    rn_ShellSegment;   /* seglist for Shell (for NewShell)       */
  265.     LONG    rn_Flags;           /* dos flags */
  266. };  /* RootNode */
  267.  
  268. #define RNB_WILDSTAR    24
  269. #define RNF_WILDSTAR    (1L<<24)
  270. #define RNB_PRIVATE1    1    /* private for dos */
  271. #define RNF_PRIVATE1    2
  272.  
  273. /* ONLY to be allocated by DOS! */
  274. struct CliProcList {
  275.     struct MinNode cpl_Node;
  276.     LONG cpl_First;         /* number of first entry in array */
  277.     struct MsgPort **cpl_Array;
  278.                  /* [0] is max number of CLI's in this entry (n)
  279.                   * [1] is CPTR to process id of CLI cpl_First
  280.                   * [n] is CPTR to process id of CLI cpl_First+n-1
  281.                   */
  282. };
  283.  
  284. struct DosInfo {
  285.     BPTR    di_McName;           /* PRIVATE: system resident module list        */
  286. #define di_ResList di_McName
  287.     BPTR    di_DevInfo;           /* Device List                    */
  288.     BPTR    di_Devices;           /* Currently zero                */
  289.     BPTR    di_Handlers;       /* Currently zero                */
  290.     APTR    di_NetHand;           /* Network handler processid; currently zero */
  291.     struct  SignalSemaphore di_DevLock;       /* do NOT access directly! */
  292.     struct  SignalSemaphore di_EntryLock;  /* do NOT access directly! */
  293.     struct  SignalSemaphore di_DeleteLock; /* do NOT access directly! */
  294. };  /* DosInfo */
  295.  
  296. /* structure for the Dos resident list.  Do NOT allocate these, use      */
  297. /* AddSegment(), and heed the warnings in the autodocs!              */
  298.  
  299. struct Segment {
  300.     BPTR seg_Next;
  301.     LONG seg_UC;
  302.     BPTR seg_Seg;
  303.     UBYTE seg_Name[4];    /* actually the first 4 chars of BSTR name */
  304. };
  305.  
  306. #define CMD_SYSTEM    -1
  307. #define CMD_INTERNAL    -2
  308. #define CMD_DISABLED    -999
  309.  
  310.  
  311. /* DOS Processes started from the CLI via RUN or NEWCLI have this additional
  312.  * set to data associated with them */
  313.  
  314. struct CommandLineInterface {
  315.     LONG   cli_Result2;           /* Value of IoErr from last command      */
  316.     BSTR   cli_SetName;           /* Name of current directory          */
  317.     BPTR   cli_CommandDir;     /* Head of the path locklist          */
  318.     LONG   cli_ReturnCode;     /* Return code from last command          */
  319.     BSTR   cli_CommandName;    /* Name of current command          */
  320.     LONG   cli_FailLevel;      /* Fail level (set by FAILAT)          */
  321.     BSTR   cli_Prompt;           /* Current prompt (set by PROMPT)      */
  322.     BPTR   cli_StandardInput;  /* Default (terminal) CLI input          */
  323.     BPTR   cli_CurrentInput;   /* Current CLI input              */
  324.     BSTR   cli_CommandFile;    /* Name of EXECUTE command file          */
  325.     LONG   cli_Interactive;    /* Boolean; True if prompts required      */
  326.     LONG   cli_Background;     /* Boolean; True if CLI created by RUN      */
  327.     BPTR   cli_CurrentOutput;  /* Current CLI output              */
  328.     LONG   cli_DefaultStack;   /* Stack size to be obtained in long words */
  329.     BPTR   cli_StandardOutput; /* Default (terminal) CLI output          */
  330.     BPTR   cli_Module;           /* SegList of currently loaded command      */
  331. };  /* CommandLineInterface */
  332.  
  333. /* This structure can take on different values depending on whether it is
  334.  * a device, an assigned directory, or a volume.  Below is the structure
  335.  * reflecting volumes only.  Following that is the structure representing
  336.  * only devices. Following that is the unioned structure representing all
  337.  * the values
  338.  */
  339.  
  340. /* structure representing a volume */
  341.  
  342. struct DeviceList {
  343.     BPTR        dl_Next;    /* bptr to next device list */
  344.     LONG        dl_Type;    /* see DLT below */
  345.     struct MsgPort *    dl_Task;    /* ptr to handler task */
  346.     BPTR        dl_Lock;    /* not for volumes */
  347.     struct DateStamp    dl_VolumeDate;    /* creation date */
  348.     BPTR        dl_LockList;    /* outstanding locks */
  349.     LONG        dl_DiskType;    /* 'DOS', etc */
  350.     LONG        dl_unused;
  351.     BSTR        dl_Name;    /* bptr to bcpl name */
  352. };
  353.  
  354. /* device structure (same as the DeviceNode structure in filehandler.h) */
  355.  
  356. struct          DevInfo {
  357.     BPTR  dvi_Next;
  358.     LONG  dvi_Type;
  359.     APTR  dvi_Task;
  360.     BPTR  dvi_Lock;
  361.     BSTR  dvi_Handler;
  362.     LONG  dvi_StackSize;
  363.     LONG  dvi_Priority;
  364.     LONG  dvi_Startup;
  365.     BPTR  dvi_SegList;
  366.     BPTR  dvi_GlobVec;
  367.     BSTR  dvi_Name;
  368. };
  369.  
  370. /* combined structure for devices, assigned directories, volumes */
  371.  
  372. struct DosList {
  373.     BPTR        dol_Next;     /* bptr to next device on list */
  374.     LONG        dol_Type;     /* see DLT below */
  375.     struct MsgPort     *dol_Task;     /* ptr to handler task */
  376.     BPTR        dol_Lock;
  377.     union {
  378.     struct {
  379.     BSTR    dol_Handler;    /* file name to load if seglist is null */
  380.     LONG    dol_StackSize;    /* stacksize to use when starting process */
  381.     LONG    dol_Priority;    /* task priority when starting process */
  382.     ULONG    dol_Startup;    /* startup msg: FileSysStartupMsg for disks */
  383.     BPTR    dol_SegList;    /* already loaded code for new task */
  384.     BPTR    dol_GlobVec;    /* BCPL global vector to use when starting
  385.                  * a process. -1 indicates a C/Assembler
  386.                  * program. */
  387.     } dol_handler;
  388.  
  389.     struct {
  390.     struct DateStamp    dol_VolumeDate;     /* creation date */
  391.     BPTR            dol_LockList;     /* outstanding locks */
  392.     LONG            dol_DiskType;     /* 'DOS', etc */
  393.     } dol_volume;
  394.  
  395.     struct {
  396.     UBYTE    *dol_AssignName;     /* name for non-or-late-binding assign */
  397.     struct AssignList *dol_List; /* for multi-directory assigns (regular) */
  398.     } dol_assign;
  399.  
  400.     } dol_misc;
  401.  
  402.     BSTR        dol_Name;     /* bptr to bcpl name */
  403.     };
  404.  
  405. /* structure used for multi-directory assigns. AllocVec()ed. */
  406.  
  407. struct AssignList {
  408.     struct AssignList *al_Next;
  409.     BPTR           al_Lock;
  410. };
  411.  
  412. /* definitions for dl_Type */
  413. #define DLT_DEVICE    0
  414. #define DLT_DIRECTORY    1    /* assign */
  415. #define DLT_VOLUME    2
  416. #define DLT_LATE    3    /* late-binding assign */
  417. #define DLT_NONBINDING    4    /* non-binding assign */
  418. #define DLT_PRIVATE    -1    /* for internal use only */
  419.  
  420. /* structure return by GetDeviceProc() */
  421. struct DevProc {
  422.     struct MsgPort *dvp_Port;
  423.     BPTR        dvp_Lock;
  424.     ULONG        dvp_Flags;
  425.     struct DosList *dvp_DevNode;    /* DON'T TOUCH OR USE! */
  426. };
  427.  
  428. /* definitions for dvp_Flags */
  429. #define DVPB_UNLOCK    0
  430. #define DVPF_UNLOCK    (1L << DVPB_UNLOCK)
  431. #define DVPB_ASSIGN    1
  432. #define DVPF_ASSIGN    (1L << DVPB_ASSIGN)
  433.  
  434. /* Flags to be passed to LockDosList(), etc */
  435. #define LDB_DEVICES    2
  436. #define LDF_DEVICES    (1L << LDB_DEVICES)
  437. #define LDB_VOLUMES    3
  438. #define LDF_VOLUMES    (1L << LDB_VOLUMES)
  439. #define LDB_ASSIGNS    4
  440. #define LDF_ASSIGNS    (1L << LDB_ASSIGNS)
  441. #define LDB_ENTRY    5
  442. #define LDF_ENTRY    (1L << LDB_ENTRY)
  443. #define LDB_DELETE    6
  444. #define LDF_DELETE    (1L << LDB_DELETE)
  445.  
  446. /* you MUST specify one of LDF_READ or LDF_WRITE */
  447. #define LDB_READ    0
  448. #define LDF_READ    (1L << LDB_READ)
  449. #define LDB_WRITE    1
  450. #define LDF_WRITE    (1L << LDB_WRITE)
  451.  
  452. /* actually all but LDF_ENTRY (which is used for internal locking) */
  453. #define LDF_ALL        (LDF_DEVICES|LDF_VOLUMES|LDF_ASSIGNS)
  454.  
  455. /* a lock structure, as returned by Lock() or DupLock() */
  456. struct FileLock {
  457.     BPTR        fl_Link;    /* bcpl pointer to next lock */
  458.     LONG        fl_Key;        /* disk block number */
  459.     LONG        fl_Access;    /* exclusive or shared */
  460.     struct MsgPort *    fl_Task;    /* handler task's port */
  461.     BPTR        fl_Volume;    /* bptr to DLT_VOLUME DosList entry */
  462. };
  463.  
  464. /* error report types for ErrorReport() */
  465. #define REPORT_STREAM        0    /* a stream */
  466. #define REPORT_TASK        1    /* a process - unused */
  467. #define REPORT_LOCK        2    /* a lock */
  468. #define REPORT_VOLUME        3    /* a volume node */
  469. #define REPORT_INSERT        4    /* please insert volume */
  470.  
  471. /* Special error codes for ErrorReport() */
  472. #define ABORT_DISK_ERROR    296    /* Read/write error */
  473. #define ABORT_BUSY        288    /* You MUST replace... */
  474.  
  475. /* types for initial packets to shells from run/newcli/execute/system. */
  476. /* For shell-writers only */
  477. #define RUN_EXECUTE        -1
  478. #define RUN_SYSTEM        -2
  479. #define RUN_SYSTEM_ASYNCH    -3
  480.  
  481. /* Types for fib_DirEntryType.    NOTE that both USERDIR and ROOT are     */
  482. /* directories, and that directory/file checks should use <0 and >=0.     */
  483. /* This is not necessarily exhaustive!    Some handlers may use other     */
  484. /* values as needed, though <0 and >=0 should remain as supported as     */
  485. /* possible.                                 */
  486. #define ST_ROOT        1
  487. #define ST_USERDIR    2
  488. #define ST_SOFTLINK    3    /* looks like dir, but may point to a file! */
  489. #define ST_LINKDIR    4    /* hard link to dir */
  490. #define ST_FILE        -3    /* must be negative for FIB! */
  491. #define ST_LINKFILE    -4    /* hard link to file */
  492. #define ST_PIPEFILE    -5    /* for pipes that support ExamineFH */
  493.  
  494. #endif    /* DOS_DOSEXTENS_H */
  495.